home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 348_01 / z80adoc.mm < prev    next >
Text File  |  1991-04-30  |  34KB  |  1,065 lines

  1. .nr N 4
  2. \" use "tbl -D z80adoc.mm |troff -Tps -mm |eps | lp -dpsript" 
  3. \" on altos86 to print
  4. .PF ""
  5. .PH ""
  6. .rs
  7. .sp 5
  8. .ce
  9. \s24 Z80 Cross Assembler\s10
  10. .sp 2
  11. .ce
  12. Portable Version
  13. .sp 20
  14. .AS
  15. This program lets you use your computer to assemble
  16. code for the Intel Z80 family of microprocessors.
  17. The program is written in portable C.
  18. All assembler features are supported except
  19. relocation, linkage, and macros.
  20. .AE
  21. .SK
  22. .nr P 1
  23. .PH ""
  24. .PF "''Page \\\\nP''"
  25. .ce
  26. Z80 Cross-Assembler (Portable)
  27. .ce
  28. Version 0.0
  29. .ce
  30. Copyright (c) 1988 Michael G. Panas
  31. .SA 1
  32. \" Use 3 for troff and 1 for nroff
  33. .ds HF 1 1 1
  34. \".ds HF 3 3 3
  35. .H 1 "Introduction"
  36. .P
  37. This assembler was developed to cross-assemble the Z80 assembly language
  38. mnemonics and pseudo opcodes defined by an assembler already
  39. running on a mini-computer.
  40. As such the mnemonics may look very strange, since they are not
  41. standard Zilog Z80 mnemonics but, extensions to the 8080 language.
  42. Many enhancements to the original mini-computer version have been made.
  43. .P
  44. This package assembles the dialect of Z80 source code
  45. defined in Appendix I into Z80 object code.
  46. It will run under DOS 2.x and up and also several 
  47. UNIX machines (see appendix II - portability).
  48. .H 1 "How to Use the Cross-Assembler"
  49. .P
  50. This program requires one input file (your Z80 source code) and 
  51. zero to two output files (the listing and the object).  The input 
  52. file MUST be specified, or the assembler will bomb on a fatal 
  53. error.  The listing and object files are optional.  If no listing 
  54. file is specified, no listing is generated, and if no object file 
  55. is specified, no object is generated.  If the object file is 
  56. specified, the object is written to this file in "Intel 
  57. hexadecimal" format.
  58.  
  59. .ti
  60. The command line for the cross-assembler looks like this:
  61.  
  62. .ti
  63. z80a source_file { -l list_file } { -o object_file }
  64.  
  65. .ti
  66. where the { } indicates that the specified item is optional.
  67. .DS I
  68. Some examples are in order:
  69.  
  70. z80a testz80.asm         source:    testz80.asm
  71.                 listing:    none
  72.                  object:    none
  73.  
  74. z80a testz80.asm -l testz80.prn     source:    testz80.asm
  75.                 listing:    testz80.prn
  76.                  object:    none
  77.  
  78. z80a testz80.asm -o testz80.hex     source:    testz80.asm
  79.                  listing:    none
  80.                  object:    testz80.hex
  81.  
  82. z80a testz80.asm -l testz80.prn -o testz80.hex
  83.                  source:    testz80.asm
  84.                 listing:    testz80.prn
  85.                  object:    testz80.hex
  86. .DE
  87. .P
  88. The order in which the source, listing, and object files are 
  89. specified does not matter.  Note that no default file name extensions
  90. are supplied by the assembler as this gives rise to portability problems.
  91. .H 1 "Format of Cross-Assembler Source Lines"
  92. .P
  93. The source file that the cross-assembler processes into a 
  94. listing and an object is an ASCII text file that you can prepare 
  95. with whatever editor you have at hand.  The most-significant 
  96. (parity) bit of each character is cleared as the character is 
  97. read from disk by the cross-assembler, so editors that set this 
  98. bit (such as WordStar's document mode) should not bother this 
  99. program.  All printing characters, the ASCII TAB character (09H), 
  100. and newline character(s) are processed by the assembler.  All 
  101. other characters are passed through to the listing file, but are 
  102. otherwise ignored.
  103. .P
  104. The source file is divided into lines by newline character(s).
  105. The internal buffers of the cross-assembler will 
  106. accommodate lines of up to 255 characters which should be more 
  107. than ample for almost any job.  If you must use longer lines, 
  108. change the constant MAXLINE in file z80a.h and recompile the 
  109. cross-assembler.  Otherwise, you will overflow the buffers, and 
  110. the program will mysteriously crash.
  111. .P
  112. Each source line is made up of three fields:  the label 
  113. field, the opcode field, and the argument field.
  114. The label field 
  115. is optional, but if it is present, it must begin in column 1.  
  116. The opcode field is optional, but if it is present, it must not 
  117. begin in column 1.
  118. If both a label and an opcode are present, 
  119. one or more spaces and/or TAB characters must separate the two.  
  120. If the opcode requires arguments, they are placed in the argument 
  121. field which is separated from the opcode field by one or more 
  122. spaces and/or TAB characters.
  123. Multiple arguments are separated by semicolons.
  124. Finally, an optional comment can 
  125. be added to the end of the line.  This comment can begin with an
  126. optional
  127. asterisk which signals the assembler to pass the rest of the 
  128. line to the listing and otherwise ignore it.
  129. The assembler ignores any text after the argument field, for this
  130. reason arguments must not contain any spaces.
  131. Thus, the source line looks like this:
  132. .DS I
  133. {label}{ opcode{ arguments}}{{*}commentary}
  134. .DE
  135. where the { } indicates that the specified item is optional.
  136. .DS I
  137. Some examples are in order:
  138. .DE
  139. .DF I
  140. column 1
  141. |
  142. v
  143. GRONK        JP    NC; LOOP    This line has everything.
  144.         INC    C        This line has no label.
  145.         BEEP            This line has no opcode.
  146. *                    This line has no label and no opcode.
  147.  
  148. * The previous line has nothing at all.
  149.         END            This line has no argument.
  150. .DE
  151. .H 2 Labels
  152. .P
  153. A label is any sequence of alphabetic or numeric characters 
  154. starting with an alphabetic.  The legal alphabetics are:
  155. .DS I
  156. ! $ % & , . : ? [ \\\ ] ^ _  ` { | }  ~  A-Z  a-z
  157. .DE
  158. .P
  159. The numeric characters are the digits 0-9.
  160. Note that "A" is not the same as "a" in a label.
  161. This is an enhancement from the mini-computer version which
  162. accepted only upper case labels.
  163. This can explain mysterious U (undefined label) errors occurring
  164. when a label appears to be defined.
  165. .P
  166. A label is permitted on any line except a line where the 
  167. opcode is LIST, ULIST, NCODE, CODE, TTL, PAG, PAGT, SKP, TYP,
  168. IF, ELS, or ENF.
  169. The label is assigned the value of 
  170. the assembly program counter before any of the rest of the line 
  171. is processed except when the opcode is EQU, ORG, or SET.
  172. .P
  173. Labels can have the same name as opcodes, but they cannot
  174. have the same name as operators or registers.  The reserved 
  175. (operator and register) names are:
  176. .DS 
  177.     *    A    AF    AND    B    BC    
  178.     C    D    DE    EQ    GE    GT
  179.     H    HIGH    HL    IX    IY    L
  180.     LE    LT    LOW    M    MOD    NC    
  181.     NE    NOT    NZ    OR    P    PE
  182.     PO    SHL    SHR    SP    XOR    Z
  183. .DE
  184. .P
  185. Labels may be pin-addressed by the use of an "@" as a prefix to the label.
  186. Pin-address labels are referenced in the code by the opposite side of the
  187. bytes than they normally would. For example this DC strings' label
  188. points to the right hand address of the string[B:
  189. .DS I
  190. LABEL    DC    "this is a normal string"
  191. .DE
  192. .P
  193. If you then generate a pin-addressed version of the
  194. same string the label refers to the left hand address of the string:
  195. .DS I
  196. @LABEL    DC    "this is a normal string"
  197. .DE
  198. .P
  199. It is neccessary to include pin-addressing in this assembler
  200. to remain compatable with existing source files written with
  201. the mini-computer version.
  202. The sense of byte addresses when referenced without pin-addressing
  203. is reversed from what one would expect in many pseudo ops such
  204. as DC and DAC.
  205. .P
  206. If a label is used in an expression before it is assigned a 
  207. value, the label is said to be "forward-referenced."  For 
  208. example:
  209. .DS
  210.     L1    EQU    L2+1    L2 is forward-referenced here.
  211.     L2
  212.     L3    EQU    L2+1    L2 is not forward-referenced here.
  213. .DE
  214. .P
  215. Note no space between operands or operators is allowed.
  216. .H 2 "Numeric Constants"
  217. .P
  218. Numeric constants can be formed in two ways; the mini-computer version,
  219. or by the Intel convention.
  220. The Intel convention was not part of the original mini-computer language,
  221. but has been added as an enhancement.
  222. .P
  223. The original standard used only decimal or hexadecimal numbers in the
  224. style of Motorola.
  225. Decimal numbers are formed by using the digits 0-9. 
  226. Hexadecimal numbers are formed by using a dollar sign ($) followed
  227. by one or more hexadecimal digits (0-9, A-F).
  228. The hex digits a-f are converted to upper case by the assembler.
  229. Also added as an enhancement was the (%) Motorola style prefix
  230. for binary numbers. In this case only 0 and 1 are allowed
  231. as digits.
  232. .P
  233. A numeric constant formed according to the Intel convention
  234. starts with a numeric character 
  235. (0-9), continues with zero or more digits (0-9, A-F), and ends 
  236. with an option